পাইথন ব্যবহার করে স্ক্র্যাচ থেকে একটি সুরক্ষিত ক্রিপ্টোকারেন্সি ওয়ালেট তৈরি করতে শিখুন। এই বিস্তারিত গাইডটিতে মূল ধারণা, ক্রিপ্টোগ্রাফি, লাইব্রেরি এবং বিশ্বব্যাপী দর্শকদের জন্য ব্যবহারিক কোড উদাহরণ রয়েছে।
পাইথন দিয়ে একটি ক্রিপ্টোকারেন্সি ওয়ালেট তৈরি করা: একটি বিস্তারিত গাইড
ডিজিটাল ফাইন্যান্সের দ্রুত বিকাশমান বিশ্বে, ক্রিপ্টোকারেন্সি একটি পরিবর্তনশীল শক্তি হিসাবে আবির্ভূত হয়েছে। এই বিপ্লবের কেন্দ্রে রয়েছে একটি ওয়ালেটের ধারণা - ব্লকচেইন নেটওয়ার্কের সাথে ইন্টারঅ্যাক্ট করার জন্য আপনার ব্যক্তিগত গেটওয়ে। যদিও অনেক বাণিজ্যিক ওয়ালেট বিদ্যমান, তবে তারা কীভাবে কাজ করে তা বোঝা যেকোনো ডেভেলপার বা প্রযুক্তি উৎসাহীর জন্য একটি মূল্যবান দক্ষতা। এই গাইডটি পাইথন ব্যবহার করে স্ক্র্যাচ থেকে একটি কার্যকরী ক্রিপ্টোকারেন্সি ওয়ালেট তৈরি করার প্রক্রিয়ার মাধ্যমে আপনাকে পথ দেখিয়ে এই রহস্য উন্মোচন করবে।
আমরা মৌলিক ক্রিপ্টোগ্রাফিক নীতি, প্রয়োজনীয় পাইথন লাইব্রেরি এবং কী তৈরি, বিটকয়েন এবং ইথেরিয়াম উভয়ের জন্য ঠিকানা তৈরি এবং লেনদেন স্বাক্ষর করার জন্য ধাপে ধাপে বাস্তবায়ন নিয়ে আলোচনা করব। এই নিবন্ধের শেষে, আপনার ওয়ালেট মেকানিক্স এবং নিজের একটি কার্যকরী কমান্ড-লাইন ওয়ালেট সম্পর্কে একটি সুস্পষ্ট ধারণা থাকবে।
দাবি পরিত্যাগী: এই গাইডে উপস্থাপিত কোড এবং ধারণা শুধুমাত্র শিক্ষাগত উদ্দেশ্যে। একটি প্রোডাকশন-গ্রেড ওয়ালেট তৈরি করার জন্য কঠোর নিরাপত্তা নিরীক্ষা, ব্যাপক পরীক্ষা এবং উন্নত সুরক্ষা ব্যবস্থা প্রয়োজন। এখানে তৈরি করা ওয়ালেটটি আসল তহবিল সংরক্ষণের জন্য ব্যবহার করবেন না।
একটি ক্রিপ্টোকারেন্সি ওয়ালেটের মূল ধারণা বোঝা
আমরা কোডের একটি লাইন লেখার আগে, একটি ক্রিপ্টোকারেন্সি ওয়ালেট আসলে কী তা বোঝা জরুরি। এর নাম অনুসারে, একটি ওয়ালেট আপনার কয়েন "সংরক্ষণ" করে না। আপনার ক্রিপ্টোকারেন্সি একটি বিতরণ করা লেজার - ব্লকচেইনে রেকর্ড হিসাবে বিদ্যমান। একটি ওয়ালেট হল একটি সফ্টওয়্যার যা ক্রিপ্টোগ্রাফিক কীগুলি পরিচালনা করে যা আপনাকে সেই লেজারে আপনার সম্পদের মালিকানা এবং নিয়ন্ত্রণ দেয়।
যেকোন অ-কাস্টোডিয়াল ওয়ালেটের প্রাথমিক উপাদানগুলি হল:
১. প্রাইভেট কী: আপনার ডিজিটাল গোপন
একটি প্রাইভেট কী হল আপনার ওয়ালেটের সবচেয়ে গুরুত্বপূর্ণ তথ্য। এটি একটি খুব বড়, এলোমেলোভাবে তৈরি হওয়া সংখ্যা যা গোপন রাখা হয় এবং শুধুমাত্র আপনি জানেন। এর উদ্দেশ্য হল একটি ডিজিটাল স্বাক্ষর তৈরি করা, যা অকাট্য প্রমাণ হিসাবে কাজ করে যে আপনি একটি লেনদেন অনুমোদন করেছেন। আপনি যদি আপনার প্রাইভেট কী হারিয়ে ফেলেন তবে আপনি চিরতরে আপনার তহবিলের অ্যাক্সেস হারাবেন। অন্য কেউ যদি এটির অ্যাক্সেস পায়, তবে তাদের আপনার তহবিলের উপর সম্পূর্ণ নিয়ন্ত্রণ থাকবে।
- উপমা: একটি প্রাইভেট কীকে আপনার ডিজিটাল ভল্টের মাস্টার কী হিসাবে ভাবুন। এটি ভল্ট খুলতে এবং এর বিষয়বস্তুর স্থানান্তর অনুমোদন করতে পারে।
২. পাবলিক কী: আপনার শেয়ারযোগ্য শনাক্তকারী
একটি পাবলিক কী গাণিতিকভাবে আপনার প্রাইভেট কী থেকে একটি একমুখী ক্রিপ্টোগ্রাফিক ফাংশন ব্যবহার করে তৈরি করা হয় যা উপবৃত্তাকার কার্ভ ক্রিপ্টোগ্রাফি (ইসিসি) নামে পরিচিত। যদিও একটি প্রাইভেট কী থেকে একটি পাবলিক কী তৈরি করা সম্ভব, তবে বিপরীতটি করা কম্পিউটেশনালি অসম্ভব। এই একমুখী সম্পর্ক ক্রিপ্টোকারেন্সি নিরাপত্তার ভিত্তি।
- উপমা: একটি পাবলিক কী আপনার ব্যাঙ্ক অ্যাকাউন্ট নম্বরের মতো। আপনি এটি অন্যদের সাথে শেয়ার করতে পারেন যাতে তারা আপনাকে অর্থ পাঠাতে পারে, তবে এটি তাদের তহবিল তোলার ক্ষমতা দেয় না।
৩. ঠিকানা: আপনার পাবলিক গন্তব্য
একটি ওয়ালেট ঠিকানা হল আপনার পাবলিক কী-এর একটি সংক্ষিপ্ত, আরও ব্যবহারকারী-বান্ধব উপস্থাপনা। এটি পাবলিক কী-তে অতিরিক্ত হ্যাশিং অ্যালগরিদম (যেমন SHA-256 এবং RIPEMD-160) প্রয়োগ করে তৈরি করা হয় এবং প্রায়শই তহবিল পাঠানোর সময় টাইপো প্রতিরোধ করার জন্য একটি চেকসাম অন্তর্ভুক্ত করে। ক্রিপ্টোকারেন্সি গ্রহণের জন্য আপনি অন্যদের সাথে যে অক্ষরগুলির স্ট্রিং শেয়ার করেন এটি তাই।
- উপমা: যদি পাবলিক কী আপনার অ্যাকাউন্ট নম্বর হয়, তবে ঠিকানাটি হল একটি নির্দিষ্ট, ফর্ম্যাট করা চালান নম্বরের মতো যাতে ত্রুটি-পরীক্ষার বৈশিষ্ট্য অন্তর্ভুক্ত থাকে।
৪. ক্রিপ্টোগ্রাফিক লিঙ্ক: একটি একমুখী রাস্তা
এই উপাদানগুলির মধ্যে সম্পর্ক একটি কঠোর, একমুখী শ্রেণিবিন্যাস:
প্রাইভেট কী → পাবলিক কী → ঠিকানা
এই নকশাটি নিশ্চিত করে যে আপনি আপনার পাবলিক কী সরাসরি প্রকাশ না করে (কিছু ক্ষেত্রে) এবং অবশ্যই আপনার প্রাইভেট কী প্রকাশ না করে নিরাপদে আপনার ঠিকানা শেয়ার করতে পারেন।
৫. ডিজিটাল স্বাক্ষর: মালিকানার প্রমাণ
আপনি যখন ক্রিপ্টোকারেন্সি পাঠাতে চান, তখন আপনি একটি লেনদেন বার্তা তৈরি করেন (যেমন, "ঠিকানা A থেকে ঠিকানা B-তে ০.৫ BTC পাঠান")। আপনার ওয়ালেট সফ্টওয়্যার তারপর আপনার প্রাইভেট কী ব্যবহার করে সেই নির্দিষ্ট লেনদেনের জন্য একটি অনন্য ডিজিটাল স্বাক্ষর তৈরি করে। এই স্বাক্ষরটি লেনদেনের সাথে নেটওয়ার্কে সম্প্রচার করা হয়। নেটওয়ার্কের মাইনার এবং নোডগুলি আপনার পাবলিক কী ব্যবহার করে যাচাই করতে পারে যে স্বাক্ষরটি বৈধ, এটি নিশ্চিত করে যে তহবিলটির বৈধ মালিক দ্বারা লেনদেনটি অনুমোদিত হয়েছিল আপনার প্রাইভেট কী না দেখেও।
আপনার পাইথন ডেভেলপমেন্ট এনভায়রনমেন্ট স্থাপন করা
আমাদের ওয়ালেট তৈরি করতে, আমাদের কয়েকটি বিশেষ পাইথন লাইব্রেরির প্রয়োজন হবে যা জটিল ক্রিপ্টোগ্রাফি পরিচালনা করে। নিশ্চিত করুন যে আপনার পাইথন ৩.৬ বা তার চেয়ে নতুন সংস্করণ ইনস্টল করা আছে। আপনি পিপ ব্যবহার করে প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করতে পারেন:
pip install ecdsa pysha3 base58
আসুন দেখে নেই প্রতিটি লাইব্রেরি কী করে:
- ecdsa: এটি উপবৃত্তাকার কার্ভ ডিজিটাল স্বাক্ষর অ্যালগরিদম (ECDSA) বাস্তবায়নের জন্য একটি গুরুত্বপূর্ণ লাইব্রেরি। আমরা
SECP256k1কার্ভের উপর ভিত্তি করে প্রাইভেট এবং পাবলিক কী তৈরি করতে এটি ব্যবহার করব, যা বিটকয়েন, ইথেরিয়াম এবং অন্যান্য অনেক ক্রিপ্টোকারেন্সি দ্বারা ব্যবহৃত স্ট্যান্ডার্ড। এটি ডিজিটাল স্বাক্ষর তৈরি এবং যাচাইকরণও পরিচালনা করে। - pysha3: যদিও পাইথনের অন্তর্নির্মিত
hashlibঅনেকগুলি হ্যাশিং অ্যালগরিদম সমর্থন করে, তবে এতে Keccak-256 অন্তর্ভুক্ত নেই, যা ইথেরিয়াম ঠিকানা তৈরি করার জন্য প্রয়োজন। এই লাইব্রেরি সেই কার্যকারিতা প্রদান করে। - base58: এই লাইব্রেরিটি Base58Check এনকোডিং বাস্তবায়ন করে, একটি বিন্যাস যা মানুষের পাঠযোগ্য বিটকয়েন ঠিকানা তৈরি করতে ব্যবহৃত হয়। এটিতে টাইপোর কারণে হওয়া ত্রুটিগুলি প্রতিরোধ করতে সহায়তা করার জন্য একটি চেকসাম অন্তর্ভুক্ত রয়েছে।
- hashlib: এই অন্তর্নির্মিত পাইথন লাইব্রেরিটি SHA-256 এবং RIPEMD-160 হ্যাশিংয়ের জন্য ব্যবহার করা হবে, যা বিটকয়েন ঠিকানা তৈরি করার অপরিহার্য পদক্ষেপ।
ধাপে ধাপে বাস্তবায়ন: ওয়ালেট লজিক তৈরি করা
এখন, আসুন কোডে ডুব দেই। আমরা আমাদের ওয়ালেটের মূল কার্যকারিতাগুলি ধীরে ধীরে তৈরি করব, প্রতিটি ধাপ ব্যাখ্যা করব।
ধাপ ১: একটি প্রাইভেট কী তৈরি করা
একটি প্রাইভেট কী মূলত একটি ২৫৬-বিট (৩২-বাইট) সংখ্যা। সবচেয়ে গুরুত্বপূর্ণ প্রয়োজন হল এটিকে অবশ্যই সত্য র্যান্ডমনেসের সাথে তৈরি করতে হবে। একটি দুর্বল র্যান্ডম নম্বর জেনারেটর ব্যবহার করলে অনুমানযোগ্য কী হতে পারে যা একজন আক্রমণকারী অনুমান করতে পারে।
পাইথনের অন্তর্নির্মিত secrets মডিউলটি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত র্যান্ডম নম্বর তৈরি করার জন্য ডিজাইন করা হয়েছে, যা এটিকে আমাদের প্রয়োজনের জন্য উপযুক্ত করে তোলে।
এখানে, `os.urandom(32)` ৩২টি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত র্যান্ডম বাইট সরবরাহ করে, যা আমাদের একটি ২৫৬-বিট প্রাইভেট কী-এর জন্য একেবারে প্রয়োজন।
ধাপ ২: পাবলিক কী উদ্ভূত করা
পরবর্তীতে, আমরা `SECP256k1` উপবৃত্তাকার কার্ভ ব্যবহার করে প্রাইভেট কী থেকে পাবলিক কী উদ্ভূত করি। `ecdsa` লাইব্রেরি এই প্রক্রিয়াটিকে সহজ করে তোলে।
```python def private_key_to_public_key(private_key_bytes): """একটি প্রাইভেট কী-কে তার সংশ্লিষ্ট পাবলিক কী-তে রূপান্তর করুন।""" # SECP256k1 হল বিটকয়েন এবং ইথেরিয়াম দ্বারা ব্যবহৃত কার্ভ sk = ecdsa.SigningKey.from_string(private_key_bytes, curve=ecdsa.SECP256k1) # আনকম্প্রেসড ফর্ম্যাটে পাবলিক কী পান (0x04 দিয়ে শুরু হয়) vk = sk.verifying_key public_key_bytes = vk.to_string("uncompressed") return public_key_bytes ````ecdsa.SigningKey` অবজেক্টটি আমাদের প্রাইভেট কী উপস্থাপন করে। তারপরে আমরা সংশ্লিষ্ট `verifying_key` (পাবলিক কী) পাই এবং এটিকে একটি "আনকম্প্রেসড" বিন্যাসে রপ্তানি করি। একটি আনকম্প্রেসড পাবলিক কী ৬৫ বাইট দীর্ঘ: একটি `0x04` প্রিফিক্স যার পরে উপবৃত্তাকার কার্ভের একটি বিন্দুর ৩২-বাইট X স্থানাঙ্ক এবং ৩২-বাইট Y স্থানাঙ্ক থাকে।
ধাপ ৩: একটি বিটকয়েন ঠিকানা তৈরি করা
একটি পাবলিক কী থেকে একটি বিটকয়েন ঠিকানা তৈরি করা নিরাপত্তা এবং ত্রুটি-পরীক্ষার জন্য ডিজাইন করা একটি বহু-পদক্ষেপ প্রক্রিয়া। এখানে স্ট্যান্ডার্ড P2PKH (পে-টু-পাবলিক-কী-হ্যাশ) ঠিকানা তৈরির প্রবাহ রয়েছে:
- SHA-256 হ্যাশিং: SHA-256 ব্যবহার করে পাবলিক কী হ্যাশ করুন।
- RIPEMD-160 হ্যাশিং: RIPEMD-160 ব্যবহার করে আগের ধাপের ফলাফল হ্যাশ করুন।
- সংস্করণ বাইট যোগ করুন: RIPEMD-160 হ্যাশে একটি সংস্করণ বাইট প্রিফিক্স যোগ করুন। বিটকয়েন মেইননেটের জন্য, এটি `0x00`।
- চেকসাম গণনা: বর্ধিত হ্যাশে দুবার SHA-256 হ্যাশিং করুন এবং চূড়ান্ত হ্যাশের প্রথম ৪ বাইট নিন। এটি চেকসাম।
- চেকসাম সংযুক্ত করুন: সংস্করণ-প্রিফিক্সড হ্যাশের শেষে ৪-বাইট চেকসাম সংযুক্ত করুন।
- Base58Check এনকোডিং: চূড়ান্ত, মানুষের পাঠযোগ্য ঠিকানা পেতে Base58Check ব্যবহার করে পুরো বাইট স্ট্রিং এনকোড করুন।
আসুন এটি পাইথনে বাস্তবায়ন করি:
```python def public_key_to_btc_address(public_key_bytes): """একটি পাবলিক কী-কে একটি বিটকয়েন P2PKH ঠিকানায় রূপান্তর করুন।""" # ধাপ ১ ও ২: SHA-256 তারপর RIPEMD-160 sha256_hash = hashlib.sha256(public_key_bytes).digest() ripemd160_hash = hashlib.new('ripemd160') ripemd160_hash.update(sha256_hash) hashed_public_key = ripemd160_hash.digest() # ধাপ ৩: সংস্করণ বাইট যোগ করুন (মেইননেটের জন্য 0x00) version_byte = b'\x00' versioned_hash = version_byte + hashed_public_key # ধাপ ৪ ও ৫: চেকসাম তৈরি করুন এবং সংযুক্ত করুন # ডাবল SHA-256 হ্যাশ checksum_hash_1 = hashlib.sha256(versioned_hash).digest() checksum_hash_2 = hashlib.sha256(checksum_hash_1).digest() checksum = checksum_hash_2[:4] binary_address = versioned_hash + checksum # ধাপ ৬: Base58Check এনকোড btc_address = base58.b58encode(binary_address).decode('utf-8') return btc_address ```ধাপ ৪: একটি ইথেরিয়াম ঠিকানা তৈরি করা
বিটকয়েনের তুলনায় একটি ইথেরিয়াম ঠিকানা তৈরি করা সহজ। এর মধ্যে পাবলিক কী-এর Keccak-256 হ্যাশ নেওয়া এবং ফলাফলের শেষ ২০ বাইট ব্যবহার করা জড়িত।
- Keccak-256 হ্যাশিং: পাবলিক কী-এর Keccak-256 হ্যাশ নিন। মনে রাখবেন যে আমাদের `0x04` প্রিফিক্স *ছাড়া* পাবলিক কী ব্যবহার করতে হবে।
- শেষ ২০ বাইট নিন: ইথেরিয়াম ঠিকানা হল এই হ্যাশের শেষ ২০ বাইট (৪০ হেক্স অক্ষর)।
- ফর্ম্যাট: ঠিকানার আগে `0x` যুক্ত করা স্ট্যান্ডার্ড।
আসুন `pysha3` ব্যবহার করে এটি বাস্তবায়ন করি:
```python def public_key_to_eth_address(public_key_bytes): """একটি পাবলিক কী-কে একটি ইথেরিয়াম ঠিকানায় রূপান্তর করুন।""" # ইথেরিয়াম ঠিকানা তৈরি আনকম্প্রেসড পাবলিক কী ব্যবহার করে 0x04 প্রিফিক্স ছাড়া uncompressed_pk = public_key_bytes[1:] # ধাপ ১: Keccak-256 হ্যাশ keccak_hash = keccak_256(uncompressed_pk).digest() # ধাপ ২: শেষ ২০ বাইট নিন eth_address_bytes = keccak_hash[-20:] # ধাপ ৩: '0x' প্রিফিক্স দিয়ে ফর্ম্যাট করুন eth_address = '0x' + eth_address_bytes.hex() return eth_address ```ধাপ ৫: একটি বার্তা স্বাক্ষর করা
একটি ডিজিটাল স্বাক্ষর প্রমাণ করে যে একটি প্রাইভেট কী-এর মালিক একটি বার্তা (যেমন একটি লেনদেন) অনুমোদন করেছে। প্রক্রিয়াটিতে বার্তার হ্যাশ স্বাক্ষর করা জড়িত, কাঁচা বার্তাটি নয়, দক্ষতা এবং নিরাপত্তার জন্য।
```python def sign_message(private_key_bytes, message): """প্রদত্ত প্রাইভেট কী দিয়ে একটি বার্তা স্বাক্ষর করুন।""" # বার্তার হ্যাশ স্বাক্ষর করা স্ট্যান্ডার্ড অনুশীলন message_hash = hashlib.sha256(message.encode('utf-8')).digest() sk = ecdsa.SigningKey.from_string(private_key_bytes, curve=ecdsa.SECP256k1) signature = sk.sign(message_hash) return signature ```ধাপ ৬: একটি স্বাক্ষর যাচাই করা
যাচাইকরণ হল বিপরীত প্রক্রিয়া। পাবলিক কী, আসল বার্তা এবং স্বাক্ষর সহ যে কেউ নিশ্চিত করতে পারে যে স্বাক্ষরটি খাঁটি। এইভাবেই ব্লকচেইন নেটওয়ার্ক লেনদেনগুলি যাচাই করে।
```python def verify_signature(public_key_bytes, signature, message): """প্রদত্ত পাবলিক কী দিয়ে একটি বার্তার জন্য একটি স্বাক্ষর যাচাই করুন।""" message_hash = hashlib.sha256(message.encode('utf-8')).digest() vk = ecdsa.VerifyingKey.from_string(public_key_bytes, curve=ecdsa.SECP256k1, hashfunc=hashlib.sha256) try: # যাচাইকরণ পদ্ধতিটি বৈধ হলে True ফেরত দেবে, অথবা একটি ব্যতিক্রম উত্থাপন করবে return vk.verify(signature, message_hash) except ecdsa.BadSignatureError: return False ```ওয়ালেট একত্রিত করা: একটি সাধারণ কমান্ড-লাইন ইন্টারফেস (CLI)
এখন যেহেতু আমাদের কাছে সমস্ত মূল ফাংশন রয়েছে, আসুন সেগুলিকে একটি সাধারণ, ব্যবহারযোগ্য কমান্ড-লাইন টুলে একত্রিত করি। আমরা লজিকটিকে এনক্যাপসুলেট করার জন্য একটি `Wallet` ক্লাস তৈরি করব এবং ব্যবহারকারীর কমান্ডগুলি পরিচালনা করতে পাইথনের `argparse` মডিউল ব্যবহার করব।
এখানে একটি সম্পূর্ণ স্ক্রিপ্ট রয়েছে যা আমাদের সমস্ত ফাংশনগুলিকে একটি সুসংহত অ্যাপ্লিকেশনটিতে একত্রিত করে।
```python #!/usr/bin/env python3 import os import hashlib import base58 import ecdsa import argparse from sha3 import keccak_256 class Wallet: """কী ম্যানেজমেন্ট এবং ঠিকানা তৈরি সহ একটি ক্রিপ্টোকারেন্সি ওয়ালেট উপস্থাপন করে।""" def __init__(self, private_key_hex=None): if private_key_hex: self.private_key = bytes.fromhex(private_key_hex) else: self.private_key = self._generate_private_key() self.public_key = self._private_to_public_key(self.private_key) self.btc_address = self._public_to_btc_address(self.public_key) self.eth_address = self._public_to_eth_address(self.public_key) def _generate_private_key(self): return os.urandom(32) def _private_to_public_key(self, private_key): sk = ecdsa.SigningKey.from_string(private_key, curve=ecdsa.SECP256k1) return sk.verifying_key.to_string("uncompressed") def _public_to_btc_address(self, public_key): sha256_hash = hashlib.sha256(public_key).digest() ripemd160 = hashlib.new('ripemd160') ripemd160.update(sha256_hash) hashed_pk = ripemd160.digest() versioned_hash = b'\x00' + hashed_pk checksum = hashlib.sha256(hashlib.sha256(versioned_hash).digest()).digest()[:4] binary_address = versioned_hash + checksum return base58.b58encode(binary_address).decode('utf-8') def _public_to_eth_address(self, public_key): uncompressed_pk = public_key[1:] keccak_hash = keccak_256(uncompressed_pk).digest() return '0x' + keccak_hash[-20:].hex() def display_details(self): print(f"প্রাইভেট কী (হেক্স): {self.private_key.hex()}") print(f"পাবলিক কী (হেক্স): {self.public_key.hex()}") print(f"বিটকয়েন ঠিকানা: {self.btc_address}") print(f"ইথেরিয়াম ঠিকানা: {self.eth_address}") def main(): parser = argparse.ArgumentParser(description="একটি সাধারণ কমান্ড-লাইন ক্রিপ্টোকারেন্সি ওয়ালেট।") parser.add_argument("command", choices=["create", "details"], help="নির্বাহ করার কমান্ড।") parser.add_argument("--privatekey", help="একটি বিদ্যমান প্রাইভেট কী হেক্স ফর্ম্যাটে যা থেকে বিস্তারিত জানতে হবে।") args = parser.parse_args() if args.command == "create": wallet = Wallet() print("--- নতুন ওয়ালেট তৈরি হয়েছে ---") wallet.display_details() print("\n*** গুরুত্বপূর্ণ ***") print("আপনার প্রাইভেট কী একটি সুরক্ষিত স্থানে সংরক্ষণ করুন। এটি আপনার তহবিলে অ্যাক্সেস করার একমাত্র উপায়।") elif args.command == "details": if not args.privatekey: print("ত্রুটি: 'details' কমান্ডের জন্য --privatekey ফ্ল্যাগ ব্যবহার করে একটি প্রাইভেট কী প্রয়োজন।") return try: wallet = Wallet(private_key_hex=args.privatekey) print("--- ওয়ালেটের বিবরণ ---") wallet.display_details() except Exception as e: print(f"প্রাইভেট কী থেকে ওয়ালেট লোড করতে ত্রুটি: {e}") if __name__ == "__main__": main() ```এই CLI টুলটি কীভাবে ব্যবহার করবেন:
- উপরের কোডটি একটি পাইথন ফাইল হিসাবে সংরক্ষণ করুন (যেমন, `cli_wallet.py`)।
- আপনার টার্মিনাল বা কমান্ড প্রম্পট খুলুন।
- একটি নতুন ওয়ালেট তৈরি করতে: `python cli_wallet.py create`
- একটি বিদ্যমান প্রাইভেট কী থেকে বিবরণ দেখতে: `python cli_wallet.py details --privatekey YOUR_PRIVATE_KEY_IN_HEX`
নিরাপত্তা বিষয়ক শ্রেষ্ঠ উপায় এবং গুরুত্বপূর্ণ বিবেচ্য বিষয়
আমরা সফলভাবে একটি মৌলিক ওয়ালেট তৈরি করেছি, তবে একটি উৎপাদন-প্রস্তুত অ্যাপ্লিকেশনের জন্য নিরাপত্তার দিকে আরও বেশি মনোযোগ দেওয়া প্রয়োজন। এখানে কিছু গুরুত্বপূর্ণ বিষয় বিবেচনা করতে হবে।
১. প্রাইভেট কী কখনই প্লেইন টেক্সটে সংরক্ষণ করবেন না
আমাদের স্ক্রিপ্টটি কনসোলে প্রাইভেট কী প্রিন্ট করে, যা অত্যন্ত অনিরাপদ। একটি বাস্তব অ্যাপ্লিকেশনে, প্রাইভেট কীগুলি একটি শক্তিশালী পাসওয়ার্ড ব্যবহার করে বিশ্রামে এনক্রিপ্ট করা উচিত। স্বাক্ষরের জন্য যখন প্রয়োজন হয় তখনই সেগুলি মেমরিতে ডিক্রিপ্ট করা উচিত। পেশাদার সমাধানগুলি প্রায়শই কীগুলি সুরক্ষিত করার জন্য ডিভাইসগুলিতে হার্ডওয়্যার সুরক্ষা মডিউল (এইচএসএম) বা সুরক্ষিত এনক্লেভ ব্যবহার করে।
২. এন্ট্রপির গুরুত্ব
আপনার ওয়ালেটের সুরক্ষা প্রাইভেট কী তৈরি করতে ব্যবহৃত এলোমেলোতা (এন্ট্রপি) দিয়ে শুরু হয়। `os.urandom` বেশিরভাগ আধুনিক অপারেটিং সিস্টেমে একটি ভাল উৎস, তবে উচ্চ-মূল্যের অ্যাপ্লিকেশনগুলির জন্য, বিকাশকারীরা প্রায়শই একাধিক উৎস থেকে এন্ট্রপি সংগ্রহ করে যাতে অপ্রত্যাশিততা নিশ্চিত করা যায়।
৩. স্মারক ফ্রেজ (সিড ফ্রেজ) - শিল্পের মান
ম্যানুয়ালি দীর্ঘ হেক্সাডেসিমেল প্রাইভেট কীগুলির ব্যাকআপ নেওয়া কষ্টকর এবং ত্রুটি-প্রবণ। শিল্পটি হায়ারারকিকাল ডিটারমিনিস্টিক (এইচডি) ওয়ালেট (বিআইপি-৩২ এ সংজ্ঞায়িত) এবং স্মারক ফ্রেজ (বিআইপি-৩৯) দিয়ে এটি সমাধান করেছে। একটি স্মারক ফ্রেজ হল ১২-২৪টি সাধারণ শব্দের একটি ক্রম যা আপনার মাস্টার প্রাইভেট কী এবং পরবর্তী সমস্ত কী নির্ধারণমূলকভাবে পুনরুত্পাদন করতে ব্যবহার করা যেতে পারে। এটি ওয়ালেট ব্যাকআপ এবং পুনরুদ্ধারকে আরও ব্যবহারকারী-বান্ধব করে তোলে।
৪. এটি একটি শিক্ষামূলক সরঞ্জাম, উৎপাদন ওয়ালেট নয়
এটি পুনরায় উল্লেখ করা অত্যাবশ্যক যে এই বাস্তবায়নটি একটি সরলীকৃত মডেল। একটি বাস্তব-বিশ্বের ওয়ালেটকে একাধিক ঠিকানা পরিচালনা করতে, ব্যালেন্স পেতে এবং লেনদেন তৈরি করতে ব্লকচেইন নোডগুলির সাথে ইন্টারঅ্যাক্ট করতে, ফি গণনা করতে এবং স্বাক্ষরিত লেনদেন নেটওয়ার্কে সম্প্রচার করতে হবে। এটির একটি সুরক্ষিত ইউজার ইন্টারফেস এবং শক্তিশালী ত্রুটি পরিচালনারও প্রয়োজন।
৫. নেটওয়ার্ক ইন্টারঅ্যাকশন
আমাদের ওয়ালেট কী তৈরি করতে এবং বার্তা স্বাক্ষর করতে পারে, তবে এটি একটি ব্লকচেইন নেটওয়ার্কের সাথে যোগাযোগ করতে পারে না। একটি সম্পূর্ণ অ্যাপ্লিকেশন তৈরি করতে, আপনাকে এমন লাইব্রেরি সংহত করতে হবে যা আরপিসি (রিমোট প্রসিডিউর কল) এর মাধ্যমে ব্লকচেইন নোডগুলির সাথে সংযোগ স্থাপন করতে পারে। ইথেরিয়ামের জন্য, `web3.py` হল স্ট্যান্ডার্ড লাইব্রেরি। বিটকয়েনের জন্য, `python-bitcoinlib`-এর মতো লাইব্রেরি ব্যবহার করা যেতে পারে।
উপসংহার এবং পরবর্তী পদক্ষেপ
অভিনন্দন! আপনি সফলভাবে পাইথন ব্যবহার করে একটি ক্রিপ্টোকারেন্সি ওয়ালেটের ক্রিপ্টোগ্রাফিক কোর তৈরি করেছেন। আমরা পাবলিক/প্রাইভেট কী ক্রিপ্টোগ্রাফির মৌলিক তত্ত্ব থেকে শুরু করে একটি বাস্তব বাস্তবায়নে যাত্রা করেছি যা বিটকয়েন এবং ইথেরিয়াম উভয় নেটওয়ার্কের জন্য বৈধ ঠিকানা তৈরি করে।
এই প্রকল্পটি ব্লকচেইন প্রযুক্তির আরও গভীর অনুসন্ধানের জন্য একটি শক্তিশালী ভিত্তি প্রদান করে। আপনি সরাসরি দেখেছেন যে একটি ওয়ালেট, এর মূল অংশে, প্রমাণিত ক্রিপ্টোগ্রাফিক নীতির উপর নির্মিত একটি অত্যাধুনিক কী ম্যানেজমেন্ট সিস্টেম।
আপনি এখান থেকে কোথায় যাবেন? আপনার পরবর্তী পদক্ষেপ হিসাবে এই চ্যালেঞ্জগুলি বিবেচনা করুন:
- এইচডি ওয়ালেট বাস্তবায়ন করুন: একটি ওয়ালেট তৈরি করতে বিআইপি-৩২, বিআইপি-৩৯ এবং বিআইপি-৪৪ স্ট্যান্ডার্ডগুলি অন্বেষণ করুন যা একটি একক স্মারক সিড ফ্রেজ থেকে লক্ষ লক্ষ ঠিকানা পরিচালনা করতে পারে।
- নেটওয়ার্কে সংযোগ করুন: একটি ইথেরিয়াম নোডে (যেমন ইনফুরা বা অ্যালকেমি) সংযোগ করতে `web3.py` ব্যবহার করুন, একটি ঠিকানার ব্যালেন্স পরীক্ষা করুন এবং একটি কাঁচা লেনদেন তৈরি করুন।
- একটি ইউজার ইন্টারফেস তৈরি করুন: আপনার ওয়ালেটকে আরও ব্যবহারকারী-বান্ধব করতে টকিন্টার-এর মতো একটি ফ্রেমওয়ার্ক ব্যবহার করে একটি সাধারণ গ্রাফিকাল ইউজার ইন্টারফেস (জিইউআই) বা ফ্ল্যাঙ্ক/ডিজ্যাঙ্গো ব্যবহার করে একটি ওয়েব ইন্টারফেস তৈরি করুন।
- অন্যান্য ব্লকচেইনগুলি অন্বেষণ করুন: অন্যান্য ব্লকচেইন প্ল্যাটফর্মগুলি কীভাবে তাদের ঠিকানা তৈরি করে তা অনুসন্ধান করুন এবং সেগুলিকে সমর্থন করার জন্য আপনার কোডটি মানিয়ে নিন।
ব্লকচেইনের বিশ্ব ওপেন সোর্স সহযোগিতা এবং জ্ঞানের তৃষ্ণার উপর নির্মিত। এইরকম সরঞ্জাম তৈরি করে, আপনি কেবল কোড শিখছেন না - আপনি একটি নতুন ডিজিটাল অর্থনীতির ভাষা শিখছেন। পরীক্ষা চালিয়ে যান, তৈরি করতে থাকুন এবং বিকেন্দ্রীকৃত প্রযুক্তির বিশাল সম্ভাবনা অন্বেষণ করতে থাকুন।